home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Bits and Bytes Volume 11, No. 05 (1989-11)(Apple Computing Enjoyment Society)(Side B).zip
/
Bits and Bytes Volume 11, No. 05 (1989-11)(Apple Computing Enjoyment Society)(Side B).po
/
PROGRAMS
/
WORD.SEARCH.bas
< prev
Wrap
BASIC Source File
|
1996-12-24
|
9KB
|
245 lines
1 REM *************************
2 REM * PUBLIC DOMAIN SOFTWARE*
3 REM * MODIFIED BY *
6 REM * YOU MAY LEGALLY *
7 REM * COPY THIS PROGRAM *
8 REM *************************
10 TEXT : HOME
15 PRINT TAB( 8);"CHALLENGER DISK 1 SIDE 2"
20 PRINT "THIS PROGRAM IS A WORD SEARCH PUZZLE"
30 PRINT "GENERATOR!! IN THE COURSE OF MAKING THE PUZZLE"
40 PRINT "THE MACHINE MAY FIND THAT IT CAN'T PUT A"
50 PRINT "PARTICULAR WORD ANYWHERE AND SO WILL "
60 PRINT "ASK YOU IF IT SHOULD START THE WHOLE"
70 PRINT "PUZZLE OVER. IF YOU DON'T WANT TO START"
80 PRINT "OVER, TYPING 'NO' WILL THROW AWAY THAT"
90 PRINT "PARTICULAR WORD. IF THIS PERSISTS,"
100 PRINT "TRY EITHER GIVING FEWER WORDS OR BIGGER"
110 PRINT "PUZZLE DIMENSIONS!"
120 PRINT
130 PRINT "BE SURE CAPS LOCK IS DOWN!
140 PRINT
150 DEF FN A(Z) = INT( RND(1) *Z +1)
160 PRINT : PRINT
170 PRINT "WILL YOUR PRINTER PRINT 80 CHARACTERS"
180 PRINT "ACROSS (Y/N)? Y"
190 VTAB 21: HTAB 15: GET TW$
200 PRINT : IF TW$ = "y" THEN TW = 80: PRINT : GOTO 260
210 IF TW$ = "Y" THEN TW = 80: PRINT : GOTO 260
220 IF TW$ = CHR$(13) THEN TW = 80: PRINT : GOTO 260
230 PRINT
240 INPUT "HOW MANY COLUMNS DOES YOUR PRINTER HAVE?";TW
250 PRINT
260 PRINT "DO YOU WANT A SOLUTION PRINTED OUT? ";: GET X$: PRINT X$
270 IF LEFT$(X$,1) = "Y" THEN PRINT : PRINT : GOTO 310
280 IF LEFT$(X$,1) = "N" THEN PRINT : PRINT : GOTO 310
290 PRINT
300 GOTO 260
310 PRINT "WHAT IS THE WIDTH OF THE PUZZLE?"
320 PRINT "(2 TO "; INT(TW/2);") ";: INPUT "";W:MD = W
330 IF W *2 < = TW THEN 350
340 PRINT "THAT WILL NOT FIT IN ";TW;" COLUMNS.": GOTO 310
350 IF W <2 THEN 310
360 PRINT
370 INPUT "THE LENGTH (2 TO 60)? ";L: IF L >W THEN MD = L
380 IF L <2 THEN 370
385 IF L >60 THEN PRINT : PRINT "THAT WILL NOT FIT ON ONE PAGE.": PRINT : PRINT "REENTER ";: GOTO 370
390 PRINT
400 INPUT "WHAT IS THE MAXIMUM NUMBER OF WORDS IN THE PUZZLE? ";M
420 IF M > = 2 THEN 440
430 PRINT "SORRY, THERE MUST BE AT LEAST 2 WORDS": GOTO 400
440 PRINT
450 DIM A$(L,W),W$(M)
460 DIM W(M,3),DXY(8,2),DD(28)
470 PRINT "NOW ENTER A HEADING THAT WILL BE PRINTED OVER THE PUZZLE"
480 PRINT "(";TW;" CHARACTERS MAXIMUM!)"
490 INPUT XY$
500 GOSUB 3000
510 PRINT "OK...ENTER A WORD AT EACH QUESTION MARK"
520 PRINT "TO REDO A WORD TYPE A HYPHEN(-)"
530 PRINT "TO FINISH EARLY TYPE A PERIOD(.)"
540 PRINT
550 FOR I = 1 TO M
560 INPUT T$: IF T$ = "-" THEN I = I -1: PRINT "REDO ";W$(I);"...": GOTO 560
570 IF T$ = "." THEN M = I -1: GOTO 790
580 IF LEN(T$) = 0 THEN PRINT "INPUT ERROR. PLEASE REENTER...": GOTO 560
590 J = 1
600 TE$ = MID$ (T$,J,1): IF TE$ > = "A" AND TE$ < = "Z" THEN 670
610 IF TE$ <"A" OR TE$ >"Z" THEN 630
620 MID$ (T$,J,1) = CHR$( ASC( MID$ (T$,J,1)) +32: GOTO 670
630 IF TE$ = T$ THEN T$ = "": GOTO 580
640 IF J = LEN(T$) THEN T$ = LEFT$(T$,J -1): GOTO 680
650 IF J = 1 THEN T$ = RIGHT$(T$, LEN(T$) -1):J = J -1: GOTO 670
660 T$ = LEFT$(T$,J -1) + RIGHT$(T$, LEN(T$) -J):J = J -1
670 J = J +1: IF J < = LEN(T$) THEN 600
680 PRINT "-";T$;"-"
690 IF LEN(T$) < = MD THEN 720
700 PRINT "THAT'S TOO LONG. ";
710 PRINT " TRY ANOTHER ONE.": GOTO 560
720 FOR IZ = 1 TO I -1: IF W$(IZ) < >T$ THEN NEXT : GOTO 740
730 PRINT "YOU ENTERED THAT ONE ALREADY.TRY ANOTHER": GOTO 560
740 W$(I) = T$
750 NEXT I
760 PRINT
770 PRINT "THAT'S IT...";M;" WORDS"
780 PRINT
790 PRINT "NOW LET ME PONDER THIS...."
800 PRINT
810 FOR I = 1 TO M -1
820 FOR J = I +1 TO M
830 IF LEN(W$(I)) < LEN(W$(J)) THEN HZ$ = W$(I):W$(I) = W$(J):W$(J) = HZ$
840 NEXT : NEXT
850 FOR I = 1 TO 8: READ DXY(I,1),DXY(I,2): NEXT
870 DATA 0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1
880 ON Z GOSUB 2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2675,2600
890 FOR I = 1 TO M
900 LN = LEN(W$(I))
910 NT = 0
920 SD = DD( FN A(28))
930 SX = FN A(W):X1 = SX +(LN -1) *DXY(SD,1): IF X1 <1 OR X1 >W THEN 920
940 SY = FN A(L):X1 = SY +(LN -1) *DXY(SD,2): IF X1 <1 OR X1 >L THEN 920
950 NT = NT +1: IF NT < >W *L *2 THEN 1010
960 PRINT "COULDN'T FIT '";W$(I);"' IN THE PUZZLE"
970 INPUT "DO YOU WISH ME TO START OVER? ";A$
980 PRINT
990 IF LEFT$(A$,1) = "Y" THEN 890
1000 W$(I) = "": GOTO 1090
1010 J = SY:K = SX
1020 FOR P = 1 TO LN
1030 IF LEN(A$(J,K)) AND A$(J,K) < > MID$ (W$(I),P,1) THEN 920
1040 J = J +DXY(SD,2):K = K +DXY(SD,1): NEXT P
1050 J = SY:K = SX
1060 FOR P = 1 TO LN:A$(J,K) = MID$ (W$(I),P,1)
1070 J = J +DXY(SD,2):K = K +DXY(SD,1): NEXT
1080 W(I,1) = SX:W(I,2) = SY:W(I,3) = SD
1090 NEXT I
1100 FOR I = 1 TO L
1110 FOR J = 1 TO W
1120 IF A$(I,J) = "" THEN A$(I,J) = CHR$( FN A(26) +64)
1130 NEXT : NEXT
1140 FOR I = 1 TO M -1: FOR J = I +1 TO M
1150 IF W$(I) < = W$(J) THEN 1180
1160 HZ$ = W$(I):W$(I) = W$(J):W$(J) = HZ$
1170 FOR K = 1 TO 3:HZ = W(I,K):W(I,K) = W(J,K):W(J,K) = HZ: NEXT K
1180 NEXT J: NEXT I
1190 PRINT
1200 INPUT "HOW MANY COPIES OF THIS PUZZLE WOULD YOU LIKE? ";N
1220 IF N >4 THEN PRINT : PRINT "THAT'S TOO MANY. MAKE 1-4 COPIES THEN": PRINT "USE THE OFFICE'S DUPLICATION.": PRINT : GOTO 1200
1225 PRINT
1230 PRINT "FOR EACH COPY REQUESTED, PRESS RETURN"
1240 PRINT "TO BEGIN PRINTING...."
1250 PRINT
1260 FOR C = 1 TO N: GOSUB 1270: NEXT : GOTO 1450
1270 PRINT : PRINT "BE SURE THE PRINTER IS TURNED ON..."
1280 INPUT A$: PR# 1
1290 T = (TW -2 *W)/2 +1: PRINT " "
1300 PRINT " "
1310 PRINT TAB( (TW - LEN(XY$))/2 +1);XY$
1320 PRINT " ": PRINT " "
1330 FOR J = 1 TO L: PRINT TAB( T);
1340 FOR K = 1 TO W: IF A$(J,K) = "." THEN PRINT ". ";: GOTO 1360
1350 PRINT CHR$( ASC(A$(J,K)));" ";
1360 NEXT : PRINT " ": NEXT
1370 PRINT " ": PRINT " "
1380 PRINT "FIND THESE HIDDEN WORDS IN THE PUZZLE"
1390 PRINT " "
1400 FOR J = 1 TO M: IF LEN(W$(J)) = 0 THEN 1430
1410 IF POS(0) + LEN(W$(J)) >TW -2 THEN PRINT " "
1420 PRINT W$(J)
1430 NEXT : FOR X = 1 TO 4: PRINT " ": NEXT
1440 RETURN
1450 IF LEFT$(X$,1) = "Y" THEN 1470
1460 IF LEFT$(X$,1) = "N" THEN PR# 0: GOTO 1610
1470 REM
1480 FOR I = 1 TO L: FOR J = 1 TO W:A$(I,J) = ".": NEXT J: NEXT I
1490 FOR I = 1 TO M
1500 LN = LEN(W$(I)):J = W(I,2):K = W(I,1)
1510 FOR P = 1 TO LN
1520 A$(J,K) = MID$ (W$(I),P,1)
1530 J = J +DXY(W(I,3),2):K = K +DXY(W(I,3),1): NEXT P
1540 NEXT I
1550 PR# 0
1560 PRINT "ADJUST YOUR PAPER IF NECESSARY AND THEN"
1570 PRINT "PRESS RETURN TO PRINT OUT THE ANSWER KEY";
1580 INPUT A$: PR# 1
1590 XY$ = "HERE IS THE ANSWER KEY:"
1600 GOSUB 1290
1610 PR# 0: PRINT : PRINT
1620 PRINT "WOULD YOU LIKE ANOTHER WORD SEARCH? ";: GET Z$
1630 IF LEFT$(Z$,1) = "Y" THEN RUN
1640 IF LEFT$(Z$,1) = "N" THEN END
1650 PRINT : GOTO 1620
2000 REM HORIZONTAL LEFT TO RIGHT ONLY
2010 FOR I = 1 TO 28:DD(I) = 3: NEXT
2020 RETURN
2050 REM TOP TO BOTTOM ONLY
2060 FOR I = 1 TO 28:DD(I) = 1: NEXT
2070 RETURN
2100 REM HORIZONTAL, BUT BACKWARDS
2110 FOR I = 1 TO 28:DD(I) = 7: NEXT
2120 RETURN
2150 REM VERTICAL, BUT BACKWARDS
2160 FOR I = 1 TO 28:DD(I) = 5: NEXT
2170 RETURN
2200 REM TOP TO BOTTOM AND LEFT TO RIGHT
2210 FOR I = 1 TO 27 STEP 2
2220 DD(I) = 1:DD(I +1) = 3: NEXT
2230 RETURN
2250 REM COMBINATION OF 1 THRU 4
2260 FOR I = 1 TO 25 STEP 4
2270 DD(I) = 1:DD(I +1) = 3:DD(I +2) = 5:DD(I +3) = 7: NEXT
2280 RETURN
2300 REM DIAGONALLY DECENDING LEFT TO RIGHT
2310 FOR I = 1 TO 28:DD(I) = 2: NEXT
2320 RETURN
2350 REM DIAGONALLY ASCENDING LEFT TO RIGHT
2360 FOR I = 1 TO 28:DD(I) = 4: NEXT
2370 RETURN
2400 REM DIAGONALLY ASCENDING RIGHT TO LEFT
2410 FOR I = 1 TO 28:DD(I) = 6: NEXT
2420 RETURN
2450 REM DIAGONALLY DESCENDING RIGHT TO LEFT
2460 FOR I = 1 TO 28:DD(I) = 8: NEXT
2470 RETURN
2500 REM DIAGONALLY LEFT TO RIGHT ASCENDING AND DESCENDING
2510 FOR I = 1 TO 27 STEP 2
2520 DD(I) = 2:DD(I +1) = 4: NEXT
2530 RETURN
2550 REM ALL DIAGONALS
2560 FOR I = 1 TO 25 STEP 4
2570 DD(I) = 2:DD(I +1) = 4:DD(I +2) = 6:DD(I +3) = 8: NEXT
2580 RETURN
2600 REM ALL DIRECTIONS
2610 FOR I = 1 TO 17 STEP 8
2620 FOR J = 0 TO 7
2630 DD(I +J) = J +1
2640 NEXT J: NEXT I
2650 FOR Q = 25 TO 27 STEP 2
2660 DD(Q) = 1:DD(Q +1) = 3: NEXT
2670 RETURN
2675 REM COMBINATION OF 5, 7, AND 8
2680 FOR I = 1 TO 25 STEP 4
2685 DD(I) = 1:DD(I +1) = 2:DD(I +2) = 3:DD(I +3) = 4: NEXT
2690 RETURN
3000 REM : SELECT WORD ARRANGEMENT
3010 HOME
3020 PRINT "SELECT THE ARRANGEMENT OF THE WORDS:": PRINT
3030 PRINT
3040 PRINT " 1> LEFT TO RIGHT ONLY (HORIZONTAL)
3050 PRINT " 2> TOP TO BOTTOM ONLY (VERTICAL)
3060 PRINT " 3> HORIZONTAL, BUT BACKWARDS"
3070 PRINT " 4> VERTICAL, BUT BACKWARDS"
3080 PRINT " 5> HORIZONTAL AND VERTICAL"
3090 PRINT " 6> A COMBINATION OF 1> THRU 4>"
3100 PRINT " 7> DIAGONALLY DESCENDING LEFT TO RIGHT"
3110 PRINT " 8> DIAGONALLY ASCENDING LEFT TO RIGHT"
3120 PRINT " 9> DIAGONALLY ASCENDING RIGHT TO LEFT"
3130 PRINT "10> DIAGONALLY DESCENDING RIGHT TO LEFT"
3140 PRINT "11> A COMBINATION OF 7> AND 8>"
3150 PRINT "12> ALL DIAGONAL COMBINATIONS
3155 PRINT "13> A COMBINATION OF 5>, 7> AND 8>
3160 PRINT "14> ALL DIRECTIONS"
3170 PRINT : PRINT : PRINT
3180 INPUT "YOUR CHOICE.....";Z
3190 IF Z <1 OR Z >14 THEN 3180
3200 HOME : RETURN